When information signals are communicated from a transmitter to a receiver via a communication channel, such information signals may be corrupted by noise associated with the channel. To help prevent such noise from corrupting the received information, a channel coding technique may be employed. Generally, coding which helps mitigate the effects of channel noise does so by introducing redundancy to the information to be communicated. Because of this redundancy, the likelihood that noise will corrupt communicated information is reduced.
Convolutional codes are a class of channel codes used to mitigate the effects of channel noise in the transmission of information. Convolutional codes are well known in the art and have been adopted as standards for certain types of communication systems. One example of such a standard is IS-54--a standard for North American digital cellular radio. IS--54 employs a type of convolutional code known in the art as a tailbiting convolutional code.
With tailbiting convolutional codes, a frame or block of information is encoded and communicated in a blockwise manner. The term "tailbiting" is used to refer to the fact that the coder begins and ends in the same coder state. The decoder is aware that the coder begins and ends in the same state, but is unaware of the value (or identity) of that state.
The maximum-likelihood decoder for the convolutional codes is known in the an as the Viterbi decoder. As is well known, the Viterbi decoder treats the problem of decoding a sequence of received symbols as a problem of finding the most likely sequence of uncorrupted symbols given an actual corrupted sequence received. The maximum-likelihood decoder for tailbiting convolutional codes employs Viterbi decoding, but can place great demands on computational resources. This is due to the fact that the decoder is unaware of the coder's starting state and must perform Viterbi decoding exhaustively for all possible starting states. As a result, suboptimal decoding techniques for tailbiting convolutional codes providing good levels of error protection with less computational burden are desirable.